package mx.com.fractal.ristorante.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import mx.com.fractal.ristorante.dao.DireccionDAO;
import mx.com.fractal.ristorante.dto.DireccionDTO;
import mx.com.fractal.ristorante.util.ParamSrcUtil;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.stereotype.Repository;

@Repository
public class DireccionDAOImpl implements DireccionDAO {

	private static final String INSERT = "INSERT INTO "+
			ParamSrcUtil.getTableName(DireccionDTO.class)
			+ "  (calle,num_ext,colonia,ciudad,estado,num_int,cp) values("
			+ ":calle,:numExt,:colonia,:ciudad,:estado,"
			+ ":numInt,:cp)";
	@Autowired
	private NamedParameterJdbcTemplate jdbc;

	public Integer save(DireccionDTO direccion) {
		MapSqlParameterSource parameters = ParamSrcUtil.getParams(direccion);
		GeneratedKeyHolder holder = new GeneratedKeyHolder();
		jdbc.update(INSERT, parameters, holder);
		return (Integer) holder.getKeys().get("id_direccion");
	}

	private static final String GET_ALL_BY="SELECT id_direccion, calle, num_ext "
			+ "colonia, ciudad, estado, num_int, cp FROM "
			+ ParamSrcUtil.getTableName(DireccionDTO.class);
	public List<DireccionDTO> getAllBy(DireccionDTO direccion) throws SQLException {
		SqlParameterSource params = ParamSrcUtil.getParams(direccion);
		return jdbc.query(GET_ALL_BY, params, new DireccionRowMapper());
	}
	
	
	private class DireccionRowMapper implements RowMapper<DireccionDTO>{

		public DireccionDTO mapRow(ResultSet rs, int i)
				throws SQLException {
			DireccionDTO direccion=new DireccionDTO();
			ParamSrcUtil.setValuesFromResultSet(direccion, rs);
			return direccion;
		}
		
	}
}
